#ifndef MARKDOWN_CPP_MAINWINDOWS_H
#define MARKDOWN_CPP_MAINWINDOWS_H

#include <QtWidgets/QApplication>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QTextEdit>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QMenu>
#include <QtWidgets/QAction>
#include <QtWidgets/QDialog>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QLabel>
#include <QtWidgets/QFrame>
#include <QtWidgets/QToolBar>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QSplitter>
#include <QtWidgets/QMessageBox>
#include <QtPrintSupport/QPrinter>

#include "MenuBar.h"
#include "SideBarWindow.h"
#include "EditorWindow.h"
#include "Config.h"
#include "NavigationWindows.h"
#include "src/log/log.h"

namespace hps {
class MainWindow: public QMainWindow {
Q_OBJECT
public:
    MainWindow(QWidget *parent = nullptr);

    void init();
    void setMainWindowUi();

    QHBoxLayout *getLowLayout() const { return m_layout; }

    // 响应函数
    void rspFunc();


private slots:
    // 隐藏所有导航页
    void hideNavWindows();
    // 展示noteBookButton导航页
    void showNoteBookNavWindow();
    // 展示noteButtonDirButton
    void showNoteBookDirNavWindow();
    // 展示Search
    void showSearchNavWindow();
    // 隐藏SideBar的Button
    void hideSideBarButton();
    // 打开文件
    void openFile(const QModelIndex &index);
    // 将当前markdown转化成html
    void changeMdToHtml();
    // md转化成json
    void changeMdToJson();
    // md转化成xml
    void changeMdToXml();
    // 转化成pdf
    void changeMdToPdf();
    // 新建笔记本
    void addNoteBook();
    // 打开笔记本
    void openNoteBook();
    // 保存当前文件
    void saveCurrentFile();
    // 新建笔记
    void addNote();
    // 打开笔记
    void openNote();
private:
    QWidget *m_widget; // 最低层的widget
    QHBoxLayout *m_layout; // 最底层的水平布局管理器

    hps::MenuBar *m_menuBar; // 菜单栏
    hps::SideBarWindow *m_sideBar; // 侧边栏
    hps::EditorWindow *m_editor; //编辑框
    hps::NavigationWindows *m_navigationWindows; // 导航栏集合

    QSplitter *m_splitter;
};
}

#endif //MARKDOWN_CPP_MAINWINDOWS_H
